'use strict';
/**
 * author：小小游 --- allen
 * date：2018.02.05
 * lastUpdateDate：2018.02.05
 * description：类型化数组的原理初步认识
 */
/**
 * 类型化数组主要用来操作二进制数据的，传统的Javascript是没办法实现的
 * 位数越高，能存储的范围就越大
 * 有符号的，如下：
 * Int8Array = 1byte 范围 -2^(8 - 1)~2^(8 - 1) - 1 ---> -128~127
 * Int16Array = 2byte 范围 -2^(16 - 1)~2^(16 - 1) - 1 ---> -32768~32767
 * Int32Array = 4byte 范围 -2^(32 - 1)~2^(32 - 1) - 1 ---> -2147483648~2147483647
 * Float64Array = 8byte 范围 -2^(64 - 1)~2^(64 - 1) - 1 ---> -9.223372036854776e18~9.223372036854776e18
 ************************--------------*************************
 * 无符号的，如下：
 * Uint8Array = 1byte 范围 0~2^8 - 1 ---> 0~255
 * Uint16Array = 2byte 范围 0～2^16 - 1 ---> 0~65535
 * Uint32Array = 4byte 范围 0～2^32 - 1 ---> 0~4294967295
 * Float64Array = 8byte 范围 0～2^64 - 1 ---> 0~1.844674407370955e19
 */
// 创建类型化数组对象函数
function createData () {
    let buffer = new ArrayBuffer(4);
    /**
     * 它们内部操作的内存地址都是同一个，区别在于一个是8位无符号的，一个是16位的，
     * 它们存储的空间大小不一样 start
     */
    let arr = new Int8Array(buffer);
    // result：4
    // console.log(arr.length);
    arr[0] = 10;
    arr[1] = 12;
    console.log(arr);

    // 16位占用2个byte
    let arr2 = new Uint16Array(buffer);
    // result：2
    // console.log(arr2.length);
    // 16位占用2个byte
    arr2[1] = 100;
    console.log(arr2);

    return buffer;
}
/**
 * 它们内部操作的内存地址都是同一个，区别在于一个是8位无符号的，一个是16位的，
 * 它们存储的空间大小不一样 end
 */
// 调用类型化数组对象函数
let buf = createData ();
let arr1 = new Int8Array(buf);
let arr2 = new Uint16Array(buf);
console.log(arr1[0], arr1[1], arr2[1]);
